<?php
require_once('Zend/Validate.php');
class Model_Validate
{
    public function NotEmpty($value)
    {
        return !Zend_Validate::is($value,'NotEmpty');
    }
    public function Alnum($value)
    {
        return !Zend_Validate::is($value,'Alnum');
    }
    public function Alpha($value)
    {
        return !Zend_Validate::is($value,'Alpha');
    }
    public function Digits($value)
    {
        return !Zend_Validate::is($value,'Digits');
    }
    public function Date($value)
    {
        return !Zend_Validate::is($value,'Date');
    }
    public function Float($value)
    {
        return !Zend_Validate::is($value,'Float');
    }
    public function Hostname($value)
    {
        return !Zend_Validate::is($value,'Hostname');
    }
    public function Int($value)
    {
        return !Zend_Validate::is($value,'Int');
    }
    public function Ip($value)
    {
        return !Zend_Validate::is($value,'Ip');
    }
    public function GreaterThan($value)
    {
        return !Zend_Validate::is($value,'GreaterThan');
    }
    public function LessThan($value)
    {
        return !Zend_Validate::is($value,'LessThan');
    }
    public function Regex($value, $regex)
    {
        return !Zend_Validate::is($value,'Regex', is_array($regex) ? $regex : array($regex));
    }
    public function StringLength($value, $min, $max)
    {
        return !Zend_Validate::is($value,'StringLength', array($min, $max));
    }

    //
    public function TelFax($value, $separator = '')
    {
        // 03-0000-0000
        // 090-0000-0000
        if($separator == '-'){
            return $this->StringLength($value, 12, 13) && $this->Regex($value, '/^0[0-9]{1,4}+\-[1-9][0-9]{0,4}\-[0-9]{0,5}$/');
        }
        elseif($separator == '()'){
            return $this->StringLength($value, 12, 13) && $this->Regex($value, '/^0[0-9]{1,4}+\([1-9][0-9]{0,4}\)[0-9]{0,5}$/');
        }
        else{
            return $this->StringLength($value, 10, 11) && $this->Regex($value, '/^0[0-9]+$/');
        }
    }
    public function Email($value, $check_domain = false)
    {
        // check_domain --> ドメインの有効性は未実装
        return $this->Regex($value, '/^[a-zA-Z0-9\._-]+@[a-zA-Z0-9_-]+[a-zA-Z0-9\._-]+\.[a-zA-Z]{1,4}$/');
    }
    public function Uri($value, $check_domain = false)
    {
        Zend_Loader::loadClass('Zend_Uri');
        return !Zend_Uri::check($value);
    }
    
    //
    
    public function getMessages($reasons)
    {
        $html = '';
        if (is_array($reasons)){
            foreach($reasons as $reason => $_){
                $html .= '<p class="error" style="display:block;">' . $this->errMessage($reason) . '</p>';
            }
        }
        else{
            $html .= '<p class="error" style="display:block;">' . $this->errMessage($reasons) . '</p>';
        }
        return $html;
    }
    public function errMessage($reason)
    {
        $map = $this->getMessageMap();
        if (isset($map[$reason])){
            return $map[$reason];
        }
        return '正しく入力してください';
    }
    private function getMessageMap()
    {
        $map = array();
        $map['NotEmpty']      = '必須項目です';
        $map['Alnum']         = '英数字で入力してください';
        $map['Alpha']         = 'アルファベットで入力してください';
        $map['Digit']         = '数値で入力してください';
        $map['Date']          = '日付が正しくありません';
        $map['Float']         = '数字で入力してください';
        $map['Hostname']      = '正しく入力してください';
        $map['Int']           = '数値で入力してください';
        $map['Ip']            = '正しく入力してください';
        $map['GreaterThan']   = '正しく入力してください';
        $map['LessThan']      = '正しく入力してください';
        $map['Regex']         = '正しく入力してください';
        $map['StringLength']  = '正しく入力してください';
        return $map;
    }
}
?>